home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
HPAVC
/
HPAVC CD-ROM.iso
/
LORD2B6.ZIP
/
3RDPARTY.DOC
< prev
next >
Wrap
Text File
|
1997-04-27
|
10KB
|
255 lines
THIRD PARTY DOCUMENTATION FOR THE LORD2 ENGINE
This is some extra info and help on creating addons/new areas/stand alone
.refs/new worlds for the LORD2 engine.
My goal is to make it easy and free (besides our cheap $15 registration
fee) for any non programmer to make his own door or world.
** The pascal structures of most data files are listed at the end of this **
** file. **
Q: How do I start adding screens from a clear map?
A: Delete the files WORLD.DAT and MAP.DAT.
Q: If I make my own world, what do I need to distribute it?
A: MAP.DAT, WORLD.DAT and all your .REF files. Probably a good idea to
also throw in a file_id.diz and a .doc file of some sort.
To install it, a person should setup a NEW game of LORD2 somewhere, then
copy your files over it. Otherwise it would destroy the real LORD2 game
they were running. Be sure to make this clear in your documentation.
Do *NOT* distirbute the GAME.DAT file. This is where non game
information is held like their registration info (they probably don't
want this overwritten!) and ticks per second, etc.
Q: You made LORD2 and my game needs it to run - does this mean I cannot
charge people for it?
A: Charge away, I don't want any royalities, you might thank me in your
docs though. ;> Since there is no way to compile or protect your work,
I doubt many will charge for addons which is fine by me.
A situation that would make charging feasible is say, if you have one
full world addon, and for $5 you would send them two more. This worked
with new LORD ansi packs for a few people, and so much more than new
ANSI can be done now.
Q: I'm editting some stuff in LORD2 - How do I know what vars you used for
what?
A: Check the GAMETXT.REF file - at the top I list every var I am using and
tell you what it is for. Any addon you make should contain a list like
this somewhere.
Q: I made my own game using your system - but it says LORDII: New World at
the bottom of the screen!! How tacky!
A: You can change this. As well as the default <more> prompt. Check
REFHELP.DOC to learn about the @PROGNAME and @MOREMAP commands.
Q: How on earth could I make an ADDON for LORD2, something they plug into
their current game like an IGM?
A: This would be very difficult. I suspect entirely new worlds/games will
be more popular, and easier to install.
One possibility is make a .REF file that does not change any vars
except ones marked 'temp vars for math' and saves to DISK anything it
needs - Then telling the SYSOP that *HE* needs to make a building and
hotspot and add it to the map manually.
But it would be ugly.. So hacking two worlds up to make one is for pros
only.
Q: Do I have to use your realtime movement/messaging system?
A: No. Download my addon BRADYREF.ZIP from my website and check it out - it
demonstrates how you can run a single .REF file for the game instead of
using the full on system. For .REF's like these, it is possible to run
them FROM the LORD2 dir, and not disrupt LORD2's real data files, in
case the sysop also has a LORD2 game running their.
It looks like this: LORD2 crap+crap.ref <other parms here>. This is
good for testing specific .ref files also. "crap" is the label to
run, and "crap.ref" is the filename.
When LORD2 is run this way, it behaves a little differently - for one, it
quits the game as soon as the .ref is done. Also, you cannot use the
built in load/save player data.
If you NEEDED this, but didn't want to use the mapping system at all, you
still can. You would edit the @#STARTGAME function to start your main
.REF game, then do a @halt to stop the game before it moves on to the
mapping system.
-= Summary =-
In any case - *IF* you are using the mapping engine in your game, be sure
to tell the user in the docs if a registered LORD2 is required so they
don't think your .ref is buggy if things go wrong.
They need a registered LORD2 if:
* You use maps that are not in the unregistered area. This kinda tricky -
but basically all the maps you can access in the very first part of the
game up to until you pass Neb are part of the unregistered area.
* You use more than 20 items in the items system. If they pickup/buy an
item pass 20, it will show up as blank, and will not be useable.
Please send your finishes addons/games over to me to check out, I'll put the
best ones/ones that work on my web page for download!
Just email attach them mime or uue to sethable@rtsoft.com.
If you have questions and need help with .REF's please feel free to email
me for help and suggestions, but even in LORD2's beta form I am getting
.REF's sent to me every day to diagnose problems and such and I can see
I won't be able to do this for everyone... <G>
But I'll do what I can!
Also: I'll probably have LORD2 ref/world download area on my website soon,
as well as a developers area. So hit www.rtsoft.com once in a while to
see what is new there!
-Seth (sethable@rtsoft.com)
-=-=-= Record formats for the map.dat, world.dat and trader.dat files =-=-
I got a few people wanting to make their own player/screen editors for
L2, this is fine with me. As promised here is the record format in
Pascal:
type world_info = record {For the world.dat file - this is kind of
the index for the MAP.REF file. It tells LORD2 how each screen hooks
to each other. loc is each screen - starting at x1,y1 is 1, then this
goes right until 80 is reached, then starts at x1,y2 for 81 etc.}
name: string[60];
loc: array[1..1600] of integer; {holds the physical map # of the
record for this screen from the MAP.DAT file.. If # is 0, there is
no screen here. }
v: array[1..40] of longint; {used by `v}
s: array[1..10] of string[80]; {used by `s}
time: longint; {year+month+day?.. not sure can't remember}
show: array[1..1600] of byte; {show up on the players auto 'map'?}
extra: array[1..396] of char; {extra for me}
end;
type all_players = record
p: array[1..200] of all_p;
end;
type user_rec = record
name : string[25]; {handle they choose for LORD2}
real_names: string[40]; {name from BBS}
gold,bank,exp: longint; {exp isn't used but reserved}
last_day_on,love: integer; {love isn't used but reserved}
wep,arm: shortint; {item # of wep/arm they have equipped}
race: string[30]; {reserved}
sex_male: integer; {1 if male.. yes there is a reason I didn't use
a byte!! <G> }
on_now,battle: byte; {these will be OFF when a player is offline}
dead,busy,deleted,nice,map,e6: integer;
{If dead, dead is 1, if deleted, deleted is 1. Map is map block #.}
x,y: integer; {current cordinates of player}
item: array[1..99] of integer; {items. used by `i}
p: array[1..99] of longint; {longints. used by `i}
b: array[1..99] of byte; {bytes. Used by `t}
last_saved: longint; {last day saved}
last_day_played: longint; {duh}
lmap: integer; {last map player was on that was 'visable'}
extra: array[1..354] of char; {reserved for me}
end;
{The update.tmp file is made up of this record, one for each player
in order. Just in case you wanted to write an ap that needed to know
what was going on realtime.}
type q_update = record
x,y: shortint;
map: integer;
on_now: byte;
busy: byte; {these are all 0 or 1 if true}
battle: byte;
end;
type item_struct = record {used by item.ref}
name: string[30]; {name of item}
action: string[40]; {string for hitting someone with it}
use_once,armour,weapon,sell,used: boolean;
value: longint; {gold value}
breakage: integer; {break percentage per use}
max_buy: integer; {unused for now}
def,strength: integer; {strength/defence added if equipped}
eat: integer; {unused for now}
ref: string[12]; {label of .ref procedure in ITEMS.REF}
use_action: string[30]; {text for using it with the .ref}
descrip: string[30]; {description of item that shows to the right}
drop: boolean; {if true, item cannot be dropped, it is a quest item}
extra: array[1..37] of char; {reserved}
end;
type item_rec = record {the entire ITEMS.DAT file is ONE of this
record format}
i: array[1..99] of item_struct;
end;
type map_info = record {used by plan_rec, which is for each
screen}
fc: shortint; {foreground color of square}
bc: shortint; {background color of square}
c: char; {actual char}
t: integer; {can't remember}
s: shortint; {what type so it knows if you can walk through it or
not.. here is the list:
if map^.w[x,y].s = 0 then ter := 'Unpassable';
if map^.w[x,y].s = 1 then ter := 'Grass';
if map^.w[x,y].s = 2 then ter := 'Rocky';
if map^.w[x,y].s = 3 then ter := 'Water';
if map^.w[x,y].s = 4 then ter := 'Ocean';
if map^.w[x,y].s = 5 then ter := 'Forest'; }
end;
type special_struct = record {also used by plan_rec, the ten
hotspots available all use this format}
move_place: integer; {map to move to, 0 if not a warp}
dx,dy: shortint; {xy cords of hotspot, 0 if hotspot not used}
x,y: shortint; {xy cords of warp destination, 0 if not a warp}
refname: string[12]; {label of ref procedure to run, if not a warp}
reffile: string[12]; {filename of .ref to run if not a warp}
extra: array[1..100] of char; {reserved by me}
end;
type plan_rec = record {record for the MAP.DAT file, which is
screen info}
name: string[30]; {name of screen}
w: array[1..80] of array[1..20] of map_info; {each block on screen}
special: array[1..10] of special_struct; {the 10 hotspots}
battle_odds: longint; {odds of running the 'screen random ref'}
batfile: string[12]; {ref file name}
batname: string[12]; {label of ref procedure}
safe: boolean; {true if players cannot fight on this screen}
extra: array[1..469] of char; {reserved by me}
end;